import cmd, os, string, sys, shutil

class UnixShell(cmd.Cmd):
    def do_EOF(self, line):
        """ The do_EOF command is called when the user presses Ctrl-D (unix)
            or Ctrl-Z (PC). """
        sys.exit()

    def help_ls(self):
        print "ls <directory>: list the contents of the specified directory"
        print " (current directory used by default)"

    def do_ls(self, line):
        # 'ls' by itself means 'list current directory'
        if line == '': 
            dirs = [os.curdir]
        else: 
            dirs = string.split(line)
        for dirname in dirs:
            print 'Listing of %s:' % dirname
            print string.join(os.listdir(dirname), '\n')

    def do_cd(self, dirname):
        # 'cd' by itself means 'go home'
        if dirname == '': 
            dirname = os.environ['HOME']
        os.chdir(dirname)

    def do_mkdir(self, dirname):
        os.mkdir(dirname)

    def do_cp(self, line):
        words = string.split(line)
        sourcefiles,target = words[:-1], words[-1] # target should be a dir
        for sourcefile in sourcefiles:
            shutil.copy(sourcefile, target)
 
    def do_mv(self, line):
        source, target = string.split(line)
        os.rename(source, target)

    def do_rm(self, line):
        map(os.remove, string.split(line))

class DirectoryPrompt:
    def __repr__(self):
        return os.getcwd()+'> '

if __name__ == '__main__':
    cmd.PROMPT = DirectoryPrompt()
    shell = UnixShell()
    shell.cmdloop()

